using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Fecha: 25/10/2013 5:54:23 PM
    /// </summary>
    [Serializable]
    public class SubAuditoriasLista : ReadOnlyListBase<SubAuditoriasLista, SubAuditoriaInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(SubAuditoriasLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static SubAuditoriasLista GetSubAuditoriasLista(ArchivoSubArchivosCriteria filter)
        {
            return DataPortal.Fetch<SubAuditoriasLista>(filter);
        }

        private SubAuditoriasLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(ArchivoSubArchivosCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_arc_referencia", criteria.Id),
                        new Parametro("ec_table", criteria.Tabla),
                        new Parametro("ec_all", criteria.Estado)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_SUBAUDITORIAS\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(SubAuditoriaInfo.GetAuditoriaMonitoreoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Fecha: 25/10/2013 5:54:23 PM
    /// </summary>
    [Serializable]
    public class SubAuditoriaInfo : ReadOnlyBase<SubAuditoriaInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public Guid ExpedienteId { get; internal set; }
      
        public DateTime FechaInicio { get; internal set; }
        public DateTime FechaFin { get; internal set; }
        public DateTime FechaAprobacion { get; internal set; }  
        public string Nombre { get; internal set; }
        public string Descripcion { get; internal set; }
        public string Promotor { get; internal set; }
        public string Estado { get; internal set; }
        public string EstadoFase { get; internal set; }
        public string Alias { get; internal set; }
        #endregion

        #region Factory Methods

        internal static SubAuditoriaInfo GetAuditoriaMonitoreoInfo(DataRow childData)
        {
            return DataPortal.FetchChild<SubAuditoriaInfo>(childData);
        }

        private SubAuditoriaInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            //auditoria  id    fechaini   fechafin   exp_id     exp_nombre exp_descripcion exp_estado promotor 
            if (childData["id"].ToString() != "")
            Id = Guid.Parse(childData["id"].ToString());
            if (childData["exp_id"].ToString() != "")
            ExpedienteId = Guid.Parse(childData["exp_id"].ToString());          
            if (childData["fechaini"].ToString() != "")
                FechaInicio = DateTime.Parse(childData["fechaini"].ToString());
            if (childData["fechafin"].ToString() != "")
                FechaFin = DateTime.Parse(childData["fechafin"].ToString());
            if (childData["fechaapb"].ToString() != "")
                FechaAprobacion = DateTime.Parse(childData["fechaapb"].ToString());
            Nombre = childData["exp_nombre"].ToString();
            Descripcion = childData["exp_descripcion"].ToString();
            Promotor = childData["promotor"].ToString();
            Alias = childData["auditoria"].ToString();
        }

        #endregion
    }
}
